#include<iostream>
#include<fcntl.h>
#include<unistd.h>
#include<errno.h>
using namespace std;

void SetNonblock(int fd)
{
    int fl=fcntl(fd,F_GETFL);//获取标志位
    if(fl<0) {
        cerr<<"获取标志位失败"<<endl;
        return;
    }
    //设置标志位
    fcntl(fd,F_SETFL,fl|O_NONBLOCK);
}


int main()
{
    char buffer[1024]={0};
    //设置非阻塞标志位
    SetNonblock(0);
    while(true)
    {
        ssize_t s=read(0,buffer,sizeof(buffer)-1);
        if(s>0){
            buffer[s-1]=0;
            cout<<"buffer:"<<buffer<<endl;
        }
        else 
        {
            if(errno==EAGAIN||errno==EWOULDBLOCK)
            {
                sleep(1);
                cout<<"底层没有数据就绪"<<endl;
                continue;
            }
            if(errno==EINTR)
            {
                cout<<"读取数据信号中断"<<endl;
                continue;
            }
            cerr<<"read error:"<<s<<endl;
            break;
        }
    }
    return 0;
}